import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import viteCompression from 'vite-plugin-compression'
import legacyPlugin from '@vitejs/plugin-legacy'
import postCssPxToRem from "postcss-pxtorem"
import compressDist, { CompressOptions } from 'rollup-plugin-compress-dist';
const outDir = 'dist'
const compressOpts: CompressOptions<'tgz'> = {
    type: 'tgz',
    archiverName: outDir+'.tar.gz',
    sourceName: outDir,
};
// https://vitejs.dev/config/
export default defineConfig({
    plugins: [vue(),
        // compressDist(compressOpts),
        viteCompression({ //gzip压缩
            verbose: true,
            disable: false,
            threshold: 10240,
            algorithm: 'gzip',
            ext: '.gz',
        }), legacyPlugin({
            targets: ['chrome 52'], // 需要兼容的目标列表，可以设置多个
            additionalLegacyPolyfills: ['regenerator-runtime/runtime'] // 面向IE11时需要此插件
        })
    ],
    resolve: {
        alias: {
            //别名配置
            "@": path.resolve(__dirname, "src"), //配置src的别名
            "@components": path.resolve(__dirname, "src/components"),
        },
    },
    base: './',
    build: {
        //浏览器兼容性  "esnext"|"modules"
        target: "modules",
        //指定输出路径
        outDir: outDir,
        //生成静态资源的存放路径
        assetsDir: "assets",
        //小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。设置为 0 可以完全禁用此项
        assetsInlineLimit: 4096,
        //启用/禁用 CSS 代码拆分
        cssCodeSplit: true,
        //构建后是否生成 source map 文件
        sourcemap: false,
        //自定义底层的 Rollup 打包配置
        // chunkSizeWarningLimit: 1500,大文件报警阈值设置,不建议使用
        rollupOptions: {
            output: { //静态资源分类打包
                chunkFileNames: 'static/js/[name]-[hash].js',
                entryFileNames: 'static/js/[name]-[hash].js',
                assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
                manualChunks(id) { //静态资源分拆打包
                    if (id.includes('node_modules')) {
                        return id.toString().split('node_modules/')[1].split('/')[0].toString();
                    }
                }
            }
        },
        //@rollup/plugin-commonjs 插件的选项
        commonjsOptions: {
        },
        //当设置为 true，构建后将会生成 manifest.json 文件
        manifest: false,
        // 设置为 false 可以禁用最小化混淆，
        // 或是用来指定使用哪种混淆器
        // boolean | 'terser' | 'esbuild'
        minify: "terser", //terser 构建后文件体积更小
        //传递给 Terser 的更多 minify 选项。
        terserOptions: {
            compress: {
                drop_console: true,
                drop_debugger: true,
            },
        },
            //设置为 false 来禁用将构建后的文件写入磁盘
        write: true,
        //默认情况下，若 outDir 在 root 目录下，则 Vite 会在构建时清空该目录。
        emptyOutDir: true,
        //启用/禁用 brotli 压缩大小报告
        brotliSize: true,
        //chunk 大小警告的限制
        chunkSizeWarningLimit: 500
    },
    ssr: {
        // 列出的是要为 SSR 强制外部化的依赖
        external: [],
        //列出的是防止被 SSR 外部化依赖项
        noExternal: [
        ]
    },
    css: {
        postcss: {
            plugins: [
                postCssPxToRem({
                    rootValue: 192, // 1rem的大小
                    propList: ['*'], // 需要转换的属性，这里选择全部都进行转换
                })
            ]
        }
    },
    server: {
      host: "localhost",
      https: false,//是否启用 http 2
      cors: true,//为开发服务器配置 CORS , 默认启用并允许任何源
      open: true,//服务启动时自动在浏览器中打开应用
      port: 9000,
      strictPort: false, //设为true时端口被占用则直接退出，不会尝试下一个可用端口
      force: true,//是否强制依赖预构建
      hmr: false,//禁用或配置 HMR 连接
      proxy: {
          // 选项写法
          '/dev-api': {
              target: 'https://unified-area-code.jzxzfw.gov.cn:18080',
              changeOrigin: true,
              rewrite: (path) => path.replace(/^\/dev-api/, '')
          },
      }
  }
})
